From: Sebastian Keller Date: Wed, 8 Nov 2023 09:46:52 +0000 (+0100) Subject: keyboard: Fix backspace not getting released after deleting preedit X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~281^2~2^2~321 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=4722dd0d320567dadcffef498b0a811084df9244;p=gnome-shell.git keyboard: Fix backspace not getting released after deleting preedit When deleting is toggled while a preedit string is present, this causes _toggleDelete() to use keyvalPress(). After the entire preedit string has been deleted, _toggleDelete() will no longer hit the code path that would call keyvalRelease() due to hasPreedit() now being false. Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/7171 Part-of: --- diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js index 3adf230fd..fb39b2d1f 100644 --- a/js/ui/keyboard.js +++ b/js/ui/keyboard.js @@ -1641,15 +1641,20 @@ export const Keyboard = GObject.registerClass({ this._deleteEnabled = enabled; this._timesDeleted = 0; - if (!Main.inputMethod.currentFocus || - Main.inputMethod.hasPreedit() || - Main.inputMethod.terminalMode) { - /* If there is no IM focus or are in the middle of preedit, - * fallback to keypresses */ - if (enabled) - this._keyboardController.keyvalPress(Clutter.KEY_BackSpace); - else - this._keyboardController.keyvalRelease(Clutter.KEY_BackSpace); + /* If there is no IM focus or are in the middle of preedit, fallback to + * keypresses */ + if (enabled && + (!Main.inputMethod.currentFocus || + Main.inputMethod.hasPreedit() || + Main.inputMethod.terminalMode)) { + this._keyboardController.keyvalPress(Clutter.KEY_BackSpace); + this._backspacePressed = true; + return; + } + + if (!enabled && this._backspacePressed) { + this._keyboardController.keyvalRelease(Clutter.KEY_BackSpace); + delete this._backspacePressed; return; }